// rollup 是生产环境打包器

// 使用minimist插件 从命令行中获取参数
const args = require('minimist')(process.argv.slice(2))
// console.log(args)
// path 模块：
// Node.js 的内置模块，专门用于处理文件/目录路径的跨平台兼容性问题（Windows、macOS、Linux 路径格式不同）。
// resolve 方法：
// 将多个路径片段解析为一个绝对路径，是 path 模块最常用的方法之一。
const { resolve } = require('path') // node中的内置模块

// esbuild
const { context } = require('esbuild')

const target = args._[0] || 'reactivity'
const format = args.f || 'global'

// 开发环境只打包某一个
const pkg = require(resolve(__dirname, `../packages/${target}/package.json`))

// iife 立即执行函数 (function(){})()

// cjs node中的模块 module.exports (require)
// esm 浏览器中的esModule模块 import

const outputFormat = format.startsWith('global') ? 'iife' : format === 'cjs' ? 'cjs' : 'esm'

// 输出文件目录
const outfile = resolve(__dirname, `../packages/${target}/dist/${target}.${format}.js`)

const inputFileList = [resolve(__dirname, `../packages/${target}/src/index.ts`)]

// 天生支持ts，不校验对错

async function runBuild() {
  const ctx = await context({
    entryPoints: inputFileList,
    outfile: outfile,
    bundle: true, // 把所有的包全部打包在一起
    sourcemap: true, // 文件关系映射
    format: outputFormat, // 输出文件格式
    globalName: pkg.buildOptions?.name, // 打包的全局名字
    platform: format === 'cjs' ? 'node' : 'browser' // 使用的平台
  })

  console.log('开启监听....')
  // 开启监听之后，会自动重新编译修改的代码，但没有提示
  await ctx.watch({}) // 启动监听
  console.log('正在监听文件热重载.....')
  await ctx.rebuild()
}

runBuild().catch(console.error)
